<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <script>
      // 1. 面向对象开发的特点
            // 继承  封装  多态
        // 对象 都是由 属性和方法构成的
    // 单例模式
      let xiaozhang={
          name:"校长",
          age:"18",
          sex:"男",
          eat(){},
          sleep(){}
      }
      // 2.工厂模式
      let car={
        name:"奔驰",
        color:"红色",
        price:"18",
        run(){},
        jia(){}
      }
      function carFactory(name,color,price) {
          let car={
          name:name,
          color:color,
          price:price,
          run(){},
          jia(){}
        }
          return car
      }
      let lixiang=carFactory("理想L9","绿色",40)
      let weilai=carFactory("蔚来","蓝色",32)
      console.log(lixiang)
      console.log(weilai)
    // 构造模式
    function Car(name,color) {
        this.name=name;
        this.color=color;
        this.run=function(){}
    }
    Car.prototype.jia=function(){
      console.log("加油")
    }
    let aodi=new Car("奥迪Rs7","白色")
    console.log(aodi)
    aodi.jia()

    function Motuo(mname) {
        this.mname=mname
    }
    Motuo.prototype=new Car("车","黑色")
    // 原型和原型链如何理解
      // 1 原型prototype 是每个函数都的属性 作用是
      // 完成继承和共享 
      // 原型链是因为每个对象都有__proto__原型指针的属性,指向上层构造的原型prototype ,由于prototype还是一个对象,还可以使用
      // __proto__继续 向上查找,从而形成了链式操作，这就是原型链，原型链重点是null
      
      aodi.__proto__.jia()//aodi.__proto__===Car.proptotype
      console.log(aodi.__proto__.__proto__)//Object.proptotype
      console.log(aodi.__proto__.__proto__.__proto__) //null
    </script>
</body>
</html>